package com.tuling.code.jvm;
/**
 * java 虚拟机占空间最大深度测试
 * @author lenovo
 *
 */
public class VmStackDeepTest {
	private static int stackDeepth = 0;
	
	/**
	 * 递归调用自身
	 * JDK5.0以后每个线程堆 栈大小为1M，以前每个线程堆栈大小为256K。
	 * 根据应用的线程所需内存大小进行调整。在相同物理内存下，减小这个值能生成更多的线程。
	 * 但是操作系统对一 个进程内的线程数还是有限制的，不能无限生成，经验值在3000~5000左右。
	 * 
	 * 线程栈的大小是个双刃剑，如果设置过小，可能会出现栈溢出，
	 * 特别是在该线程内有递归、大的循环时出现溢出的可能性更大，
	 * 如果该值设置过大，就有影响到创建栈的数量，如果是多线程的应用，就会出现内存溢出的错误．
	 * JVM可创建的最大线程数限制因素:线程堆栈大小——》进程的最大内存——》操作系统位数
	 */
	private static void stackOverFlow(){
		stackDeepth ++;
		stackOverFlow();
	}
	
	public static void main(String[] args) {
		try{
			stackOverFlow();
		} catch(Throwable e){
			System.out.println("stackDeepth :"+stackDeepth);
			throw e;
		}
	}
}
